home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 201-225 / disk_222 / plplot / src / source.zoo / pllclp.c < prev    next >
C/C++ Source or Header  |  1989-05-15  |  2KB  |  66 lines

  1. /* Draws a (x1,y1) to (x2,y2) within the clip limits */
  2.  
  3. #include "plplot.h"
  4.  
  5. #define betw(ix,ia,ib) ((ix<=ia && ix>=ib) || (ix>=ia && ix<=ib))
  6. #define inside(ix,iy) (betw(ix,clpxmi,clpxma) && betw(iy,clpymi,clpyma))
  7. #define ixcut(iy) round((float)((x2-x1)*(iy-y1)+x1*(y2-y1))/(float)(y2-y1))
  8. #define iycut(ix) round((float)((y2-y1)*(ix-x1)+y1*(x2-x1))/(float)(x2-x1))
  9.  
  10. void pllclp(x1,y1,x2,y2)
  11. int x1,y1,x2,y2;
  12. {
  13.       int xt[2],yt[2];
  14.       int it, k;
  15.       int clpxmi,clpxma,clpymi,clpyma;
  16.  
  17.       gclp(&clpxmi,&clpxma,&clpymi,&clpyma);
  18.       k=0;
  19.       if (inside(x1,y1)) {
  20.         xt[k]=x1;
  21.         yt[k]=y1;
  22.         k=k+1;
  23.       }
  24.       if (inside(x2,y2)) {
  25.         xt[k]=x2;
  26.         yt[k]=y2;
  27.         k=k+1;
  28.       }
  29.       if (k == 2) goto draw;
  30.       if (y1 != y2) {
  31.         it=ixcut(clpymi);
  32.         if (inside(it,clpymi) && betw(clpymi,y1,y2)) {
  33.           xt[k]=it;
  34.           yt[k]=clpymi;
  35.           k=k+1;
  36.         }
  37.         if (k == 2) goto draw;
  38.         it=ixcut(clpyma);
  39.         if (inside(it,clpyma) && betw(clpyma,y1,y2)) {
  40.           xt[k]=it;
  41.           yt[k]=clpyma;
  42.           k=k+1;
  43.         }
  44.         if (k == 2) goto draw;
  45.       }
  46.       if (x1 != x2) {
  47.         it=iycut(clpxmi);
  48.         if (inside(clpxmi,it) && betw(clpxmi,x1,x2)) {
  49.           xt[k]=clpxmi;
  50.           yt[k]=it;
  51.           k=k+1;
  52.         }
  53.         if (k == 2) goto draw;
  54.         it=iycut(clpxma);
  55.         if (inside(clpxma,it) && betw(clpxma,x1,x2)) {
  56.           xt[k]=clpxma;
  57.           yt[k]=it;
  58.           k=k+1;
  59.         }
  60.         if (k == 2) goto draw;
  61.       }
  62. draw:
  63.       if (k == 2) genlin(xt[0],yt[0],xt[1],yt[1]);
  64.       scurr(x2,y2);
  65.